﻿using System;

namespace Actya.Core.Infrastructure.Logging
{
	public interface ILogger
	{
		/// <summary>
		/// Logs the message as info.
		/// </summary>
		/// <param name="format">A formatted message.</param>
		/// <param name="args">Parameters to be injected into the formatted message.</param>
		void Debug(string format, params object[] args);

		/// <summary>
		/// Indicates if debug logging enabled.
		/// </summary>
		bool IsDebugEnabled { get; }

		/// <summary>
		/// Logs the message as info.
		/// </summary>
		/// <param name="format">A formatted message.</param>
		/// <param name="args">Parameters to be injected into the formatted message.</param>
		void Info(string format, params object[] args);

		/// <summary>
		/// Logs the message as a warning.
		/// </summary>
		/// <param name="format">A formatted message.</param>
		/// <param name="args">Parameters to be injected into the formatted message.</param>
		void Warn(string format, params object[] args);

		/// <summary>
		/// Logs the message as an error.
		/// </summary>
		/// <param name="format">A formatted message.</param>
		/// <param name="args">Parameters to be injected into the formatted message.</param>
		void Error(string format, params object[] args);

		/// <summary>
		/// Logs the exception.
		/// </summary>
		/// <param name="exception">The exception.</param>
		void Error(Exception exception);
	}
}
